首页 > 试题广场 >

下象棋

[编程题]下象棋
  • 热度指数:2699 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

牛妹在和牛牛下牛客象棋。现在轮到牛妹了,牛妹想知道她在这一回合能否战胜牛牛。

棋盘chessboard上只可能包含:炮,将,车,兵

牛客象棋的规则解释:
炮:炮在不吃子的时候,走动与车完全相同,但炮在吃棋子时,必须跳过一个棋子,我方的和敌方的都可以
兵:可以上下左右移动,每次只能移动一格
车:上下左右均可走,只要无棋子阻拦,步数不受限制。
将:可以上下左右移动,每次只能移动一格
接下来给出一个棋盘,牛妹的棋子用大写字母表示,牛牛的棋子用小写字母表示。
将用表示,炮用表示,车用表示,兵用表示,没有棋子的格子用表示

保证棋盘上一定同时包含各一个。

牛妹能胜利则返回"Happy",否则返回"Sad"

示例1

输入

["......", "..B...", "P.C.j.", "......", "..b..."," ...J.." ]

输出

"Happy"

说明

牛妹的炮可以攻击到牛牛的将,所以获胜

备注:


class Solution:
    def playchess(self , chessboard ):
        # write code here
        x,y = -1,-1
        m,n = len(chessboard),len(chessboard[0])
        for i in range(m):
            for j in range(n):
                if chessboard[i][j] == 'j':
                    x = i
                    y = j
        for dx,dy in {(1,0),(-1,0),(0,1),(0,-1)}:
            cur_x,cur_y = x,y
            cnt = 0
            step = 0
            while 0 <= cur_x + dx < m and 0 <= cur_y + dy < n:
                if step == 0:
                    if chessboard[cur_x + dx][cur_y + dy] == 'B'&nbs***bsp;chessboard[cur_x + dx][cur_y + dy] == 'J':
                        return 'Happy'
                if chessboard[cur_x + dx][cur_y + dy] == 'C':
                    if cnt == 0:
                        return 'Happy'
                if chessboard[cur_x + dx][cur_y + dy] == 'P':
                    if cnt == 1:
                        return 'Happy'
                if chessboard[cur_x + dx][cur_y + dy] != '.':
                    cnt += 1
                
                step += 1
                cur_x += dx
                cur_y += dy 
        return 'Sad'

发表于 2021-08-28 17:21:21 回复(0)

问题信息

难度:
1条回答 4025浏览

热门推荐

通过挑战的用户

查看代码